package educar.controllers;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileSystemView;

import educar.idioma.Locale;


/**
 * Controlador que permite exportar las tablas
 * @author Cristian
 */
public class Exportar{
	
	/**
	 * Constructor del metodo exportar
	 * @param tabla JTable a exportar
	 */
	public Exportar(JTable tabla) {
		saveFile(tabla);
	}
	
	/**
	 * Metodo principal que abre la ventana de guardar
	 * archivo y luego llama a guardar archivo segun el 
	 * fichero seleccionado comprobando ciertas cosas antes
	 * @param tabla JTable a exportar
	 */
	private void saveFile(JTable tabla) {
		/*Archivo a guardar*/
		File file = null;
		/*Selector de archivos Java*/
		JFileChooser fc = new JFileChooser();
		/*filtro de extensiones*/
		FileNameExtensionFilter filter = new FileNameExtensionFilter(".txt and .csv files", "txt", "csv");
        fc.setFileFilter(filter);
        /*me paro en la carpeta desktop o home segun windows o linux*/
		FileSystemView system = FileSystemView.getFileSystemView();
		File homeDir = system.getHomeDirectory();
		fc.setCurrentDirectory (homeDir); 
		/*segun los resultados del dialogo guardar*/
		int result = fc.showSaveDialog(null);		
		if (result == JFileChooser.APPROVE_OPTION) {
			/*si acepto obtengo el archivo y compruebo la extension*/
			file = fc.getSelectedFile();			 
		    int dotPos = file.getName().toString().lastIndexOf(".")+1;
			String extension = file.getName().substring(dotPos);
			if (!extension.equals("txt") && !extension.equals("csv")) {
			 file = new File(file.getPath()+".txt");			 
			}
			/*si el archivo ya existe pregunto por reemplazar*/
			if (file.exists()) {
				int n = JOptionPane.showConfirmDialog(null,Locale.REEMPLAZAR+": "+file.getName(),Locale.MESSAGE,JOptionPane.YES_NO_OPTION);
				if (n == JOptionPane.OK_OPTION) {				
					save(file,tabla);
				}
				else {
					saveFile(tabla);
				}
			}
			else {
				save(file,tabla);
			}
		}
		/*si cancelo el guardado cierro el fileChooser*/
		else {
			fc.cancelSelection();
		}
	} 
	
	/**
	 * Dado un archivo y una tabla 
	 * guarda los datos de la tabla en el mismo
	 * guardando los nombres de las columnas
	 * y los datos separados por coma
	 * @param file "archivo a guardar"
	 * @param tabla "tabla a guardar"
	 */
	private void save(File file,JTable tabla) {
		/*file write para escribir en el archivo*/
		FileWriter fw = null;
		try {
			/*creo un filewriter para escribir el archivo*/
			file.createNewFile();
			fw = new FileWriter(file);
			/*obtengo los nombre de las columnas y los escribo*/
			for (int k=0;k<tabla.getModel().getColumnCount();k++) {
				fw.write(tabla.getModel().getColumnName(k));
				fw.write(",");
			}
			/*inserto un salto de linea*/
			fw.write("\r\n");
			/*obtengo los datos de la tabla insertando saltos de linea donde sea necesario*/
			for (int j=0;j<tabla.getRowCount();j++) {
				for(int i=0;i<tabla.getModel().getColumnCount();i++) {
					fw.write(tabla.getModel().getValueAt(j, i).toString());
					fw.write(",");
				}
				fw.write("\r\n");
			}
			/*cierro el archivo*/
			fw.close();
			/*informo exito!*/
			JOptionPane.showMessageDialog(null,Locale.FILE+": "+file.getName()+" "+Locale.SAVED,Locale.MESSAGE,JOptionPane.INFORMATION_MESSAGE);
		} catch (IOException e) {
			/*se fue todo al carajo*/
			e.printStackTrace();
		}
	}
}